home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Libris Britannia 4
/
science library(b).zip
/
science library(b)
/
TECHNICA
/
COMPUTER
/
0966.ZIP
/
ETCH.ARC
/
ETCH.BAS
< prev
next >
Wrap
BASIC Source File
|
1986-12-13
|
52KB
|
1,673 lines
START: CLS: KEY OFF: SCREEN 2
KEY 1,CHR$(127): KEY 2,CHR$(14): KEY 3,CHR$(15): KEY 4,CHR$(16): KEY 5,CHR$(17): KEY 6,CHR$(19): KEY 10,CHR$(18)
DIM SX(3970): DIM SW(4000)
DIM GB(100)
DIM Q$(10)
DIM CZ(10) : DIM CA(10)
DIM WS(80) : DIM EN(80): DIM PLU(80)
DIM Q1(50) : DIM Q2(40): DIM Q3(60) : DIM Q4(80): DIM Q5(20)
PZ=7: PY=16: TY=16: TZ=-1: GZ=PZ: GY=PY
OPEN "SETUP.DAT" AS #1
FIELD #1,20 AS IA$,10 AS IB$,2 AS IC$
GET #1,1
PTH$=LEFT$(IA$,INSTR(IA$," ")-1)
MPH$=PTH$
YARBLOCKO=VAL(IB$)
MXF=VAL(IC$)
CLOSE
NAMD$="Untitled"
FONT$=PTH$+"FONT1.DAT": FONT=1
DEFINT K,Z,Y,X
LINE (0,0)-(639,8),1,BF
GET (0,0)-(79,7),Q1
GET (0,0)-(55,7),Q2
GET (0,0)-(111,7),Q3
GET (0,0)-(135,7),Q4
GET (0,0)-(23,7),Q5
GOSUB BORDER
O=1: X=320: Y=100: CO=1: O=1: OY=1: OX=1: LM=0: MN=0
GOSUB SM1: GOSUB SM2: GOSUB SM3: GOSUB SM4: GOSUB SM5
MAIN: A$=""
M1: B$=INKEY$: IF B$<>"" THEN A$=B$: GOTO M1:
F=POINT(H,K)
IF A$=CHR$(127) THEN GOTO HELP
IF A$=CHR$(14) THEN GOTO CLOCK
IF A$=CHR$(15) THEN GOTO DISKDIR
IF A$=CHR$(16) THEN GOTO CALC
IF A$=CHR$(17) THEN GOTO HEADLINE
IF A$=CHR$(18) THEN GOTO QUIT
IF A$=CHR$(19) THEN GOTO ICON
IF A$="-" THEN GOTO FONT
IF A$="+" THEN GOTO FONT
IF A$="O" THEN GOTO CURSOR
IF A$="F" THEN GOTO FILL
IF A$="f" THEN GOTO TILE
IF A$="t" THEN GOTO TEXT
IF A$="L" THEN GOTO DLINE
IF A$="C" THEN GOTO DCIRCLE
IF A$="J" THEN GOTO JUMP
HOME: IF A$="H" THEN X=320: Y=100: LINE (X,Y)-(X+LM,Y+MN),CO,BF: GOSUB SM4: GOTO MAIN
ETRASH: IF A$="E" THEN CO=0: GOSUB SM2: GOTO MAIN
EDRAW: IF A$="D" THEN CO=1: GOSUB SM2: GOTO MAIN
IF A$="P" THEN GOTO PLARGE
IF A$="p" THEN GOTO PSMALL
IF A$="S" THEN GOTO DSAVE
IF A$="R" THEN GOTO DLOAD
IF A$="N" THEN GOTO RENAME
IF A$="K" THEN GOTO PURGE
IF A$="X" THEN GOTO NEGA1
IF A$="x" THEN GOTO NEGA2
IF A$="g" THEN GOTO MOVE
IF A$="q" THEN GOTO CSTEP
IF A$="/" THEN GOTO KLINE
IF A$="\" THEN GOTO ETCHCOM
IF A$="B" THEN GOTO BOX
IF A$="M" THEN GOTO MAGNIFY
IF A$="1" THEN
X=X-10: Y=Y+5: GOTO M9
ELSEIF A$="2" THEN
Y=Y+5: GOTO M9
ELSEIF A$="3" THEN
X=X+10: Y=Y+5: GOTO M9
ELSEIF A$="4" THEN
X=X-10: GOTO M9
ELSEIF A$="6" THEN
X=X+10: GOTO M9
ELSEIF A$="7" THEN
X=X-10: Y=Y-5: GOTO M9
ELSEIF A$="8" THEN
Y=Y-5: GOTO M9
ELSEIF A$="9" THEN
X=X+10: Y=Y-5: GOTO M9
END IF
IF LEN(A$)<>2 THEN GOTO M2
AQ=ASC(RIGHT$(A$,1))
IF AQ=77 THEN
X=X+OX
ELSEIF AQ=75 THEN
X=X-OX
ELSEIF AQ=72 THEN
Y=Y-OY
ELSEIF AQ=80 THEN
Y=Y+OY
ELSEIF AQ=79 THEN
Y=Y+OY
X=X-OX
ELSEIF AQ=81 THEN
Y=Y+OY
X=X+OX
ELSEIF AQ=71 THEN
Y=Y-OY
X=X-OX
ELSEIF AQ=73 THEN
Y=Y-OY
X=X+OX
ELSE GOTO MAIN
END IF
M9: IF X<0 THEN X=639 ELSE IF X>639 THEN X=0
IF Y<10 THEN Y=199 ELSE IF Y>199 THEN Y=10
GOSUB SM4
M2:
LINE (X,Y)-(X+LM,Y+MN),0,BF: LINE (X,Y)-(X+LM,Y+MN),1,BF
IF CO=1 THEN LINE (X,Y)-(X+LM,Y+MN),(1-CO),BF: LINE (X,Y)-(X+LM,Y+MN),CO,BF: GOTO MAIN
IF F=-1 THEN LINE (X,Y)-(X+LM,Y+MN),1,BF ELSE LINE (X,Y)-(X+LM,Y+MN),0,BF: GOTO MAIN
GOTO MAIN ' End of START main routine.
SM1:
LOCATE 1,43
PRINT "Step X:";
PRINT USING "###";OX;
PRINT " Y:";
PRINT USING "###";OY;
PUT (336,0),Q4,XOR
RETURN
SM2:
IF CO=0 THEN
LOCATE 1,30
PRINT "Erase Mode";
PUT (232,0),Q1,XOR
ELSEIF CO=1 THEN
LOCATE 1,30
PRINT "Draw Mode";
PUT (232,0),Q1,XOR
END IF
RETURN
SM3:
LOCATE 1,5
PRINT NAMD$;STRING$(14-LEN(NAMD$),32);: PUT (32,0),Q3,XOR
RETURN
SM4:
LOCATE 1,65
PRINT USING "### ###";X;Y;
PUT (512,0),Q2,XOR
RETURN
SM5:
LOCATE 1,25
PRINT "#";
PRINT USING "##";FONT;
PUT (192,0),Q5,XOR
RETURN
DLINE: ' Line from (X,Y) to (H,K).
GET (3,12)-(336,43),SW: LINE (3,12)-(336,43),0,BF
LINE (3,12)-(336,43),1,B: LINE (5,14)-(334,41),1,B
LOCATE 3,26: PRINT "Line Function";
LOCATE 4,2
PRINT "Line from (";
PRINT USING "###";X;: PRINT ",";: PRINT USING "###";Y;
PRINT ") to (____,____)";
BL=48: BU=57: REY=4: REX=27: MAXL=3: GOSUB RECIEVE
H=VAL(HW$)
BL=48: BU=57: REY=4: REX=32: MAXL=3: GOSUB RECIEVE
K=VAL(HW$)
IF H<0 THEN H=0 ELSE IF H>639 THEN H=639
IF K<10 THEN K=10 ELSE IF K>199 THEN K=199
LOCATE 5,2 : PRINT "Colour...(Black=0, White=1)...";
BL=48: BU=49: REY=5: REX=32: MAXL=1: GOSUB RECIEVE
CD=VAL(HW$)
LINE (3,12)-(336,43),0,BF: PUT (3,12),SW,PSET: LINE (X,Y)-(H,K),CD
GOTO MAIN
DCIRCLE: ' Circle Function
GET (3,12)-(320,85),SW
LINE (3,12)-(320,85),0,BF: LINE (3,12)-(320,85),1,B: LINE (5,14)-(318,83),1,B
LOCATE 3,24: PRINT "Circle Function";
LOCATE 4,3 : PRINT "Radius.......................";
BL=46: BU=57: REY=4: REX=33: MAXL=3: GOSUB RECIEVE
RD=VAL(HW$)
LOCATE 5,3 : PRINT "Colour..(Black=0, White=1)...";
BL=48: BU=49: REY=5: REX=33: MAXL=1: GOSUB RECIEVE
IF HW$="" THEN HW$="1": LOCATE 6,33: PRINT " 1";
CD=VAL(HW$)
LOCATE 6,3 : PRINT "X:Y Ratio....................";
BL=46: BU=57: REY=6: REX=33: MAXL=5: GOSUB RECIEVE
RA=VAL(HW$)
IF RA=0 THEN RA=.42: LOCATE 6,33: PRINT ".42";
LOCATE 7,3 : PRINT "Degree Start.................";
BL=48: BU=57: REY=7: REX=33: MAXL=3: GOSUB RECIEVE
WS$=HW$
IF WS$="" THEN WS$="0": LOCATE 7,33: PRINT " 0";
BG=VAL(WS$)*(3.1415927#/180)
LOCATE 8,3 : PRINT "Degree End...................";
BL=48: BU=57: REY=8: REX=33: MAXL=3: GOSUB RECIEVE
WS$=HW$
IF WS$="" THEN WS$="360": LOCATE 8,33: PRINT "360";
EG=VAL(WS$)*(3.1415927#/180)
LOCATE 10,3: PRINT "Esc to Cancel. Return to Go.";
dc1: WVZ$=INKEY$: IF WVZ$="" THEN goto dc1
IF WVZ$=CHR$(13) THEN
LINE (3,12)-(320,85),0,BF
PUT (3,12),SW,PSET
CIRCLE (X,Y),RD,CD,BG,EG,RA
FOR Y1=0 TO 9
LINE (0,Y1)-(639,Y1),0
NEXT Y1
LINE (0,0)-(639,8),1,BF: GOSUB SM1: GOSUB SM2: GOSUB SM3: GOSUB SM4: GOSUB SM5
GOTO MAIN
ELSEIF WVZ$=CHR$(27) THEN
RD=0: CD=1: RA=.42: BG=0: EG=360
LINE (3,12)-(320,85),O,BF
PUT (3,12),SW,PSET
GOTO MAIN
ELSE GOTO DC1
END IF
FILL: 'Fill screen with pixels.
PSET (X,Y),0: PAINT (X,Y),1
FOR Y1=0 TO 9
LINE (0,Y1)-(639,Y1),0
NEXT Y1
LINE (0,0)-(639,8),1,BF: GOSUB SM1: GOSUB SM2: GOSUB SM3: GOSUB SM4: GOSUB SM5
GOTO MAIN
JUMP: ' Jump to new location on screen.
GET (3,12)-(320,35),SW: LINE (3,12)-(320,35),0,BF: LINE (3,12)-(320,35),1,B: LINE (5,14)-(318,33),1,B
LOCATE 3,26: PRINT "Jump Function";
LOCATE 4,2 : PRINT "Jump from (";
PRINT USING "###";X;: PRINT ",";: PRINT USING "###";Y;
PRINT ") to (____,____)";
BL=48: BU=57: REY=4: REX=26: MAXL=3: GOSUB RECIEVE
H=VAL(HW$)
BL=48: BU=57: REY=4: REX=31: MAXL=3: GOSUB RECIEVE
K=VAL(HW$)
IF H<0 THEN H=0 ELSE IF H>639 THEN H=639
IF K<10 THEN K=10 ELSE IF K>199 THEN K=199
LINE (3,12)-(320,35),0,BF: PUT (3,12),SW,PSET: X=H: Y=K: PSET (X,Y),1
GOSUB SM4
GOTO MAIN
DSAVE: 'Save screen image.
IF NAMD$="Untitled" THEN GOTO DSPECIAL
LOCATE 1,1
PRINT SPC(79);" ";: DEF SEG=&HB800
V$=MPH$+NAMD$
BSAVE V$,0,&H4000: V$=""
LINE (0,0)-(639,8),1,BF: GOSUB SM1: GOSUB SM2: GOSUB SM3: GOSUB SM4: GOSUB SM5
GOTO MAIN
DSPECIAL: 'Get filespec for new screen.
GET (152,72)-(472,141),SW
LINE (152,72)-(472,141),0,BF: LINE (152,72)-(472,141),1,B: LINE (154,74)-(470,139),1,B
LINE (162,92)-(208,115),1,B: LINE (180,94)-(189,108),1,B: LINE (180,110)-(189,113),1,B: PAINT(181,111): PAINT (181,95),1
LOCATE 11,31: PRINT "The screen is untitled.";
LOCATE 12,31: PRINT "Disk Drive & Path......";
BL=22: BU=126: REY=13: REX=31: MAXL=30: GOSUB RECIEVE: IF HW$="" THEN HW$=PTH$
MPH$=HW$: HW$=""
LOCATE 14,31: PRINT "Enter filename.........";
DS1: BL=22: BU=126: REY=15: REX=31: MAXL=20: GOSUB RECIEVE
IF HW$="" THEN LOCATE 15,31: PRINT SPC(20);: GOTO DS1
IF HW$="CSI.DAT" OR NAMD$="ETCH.DAT" OR NAMD$="SCREEN.DAT" THEN LOCATE 15,31: PRINT SPC(20): GOTO DS1
NAMD$=HW$
PUT (152,72),SW,PSET: GOTO DSAVE
DLOAD: 'Load screen image.
DEF SEG=&HB800
V$=MPH$+NAMD$
BLOAD V$: V$=""
GOSUB BORDER
LINE (0,0)-(639,8),1,BF: GOSUB SM1: GOSUB SM2: GOSUB SM3: GOSUB SM4: GOSUB SM5
GOTO MAIN
RENAME: ' Change default filename.
NAMD$=""
GET (3,12)-(320,43),SW
LINE (3,12)-(320,43),0,BF
LINE (3,12)-(320,43),1,B
LINE (5,14)-(318,41),1,B
LOCATE 3,20: PRINT "New File Function";
LOCATE 4,2: PRINT "Disk Drive & Path...";
BL=22: BU=126: REY=4: REX=24: MAXL=20: GOSUB RECIEVE: IF HW$="" THEN HW$=PTH$
MPH$=HW$: HW$=""
LOCATE 5,2: PRINT "Filespec...";
DE1: BL=32: BU=126: REY=5: REX=24: MAXL=20: GOSUB RECIEVE
ZLG$=HW$
IF ZLG$="" THEN LOCATE 5,16: PRINT SPC(20);: GOTO DE1
NAMD$=ZLG$
LINE (3,12)-(320,41),0,BF: PUT (3,12),SW,PSET
GOSUB SM3
GOTO MAIN
PURGE: 'Clear workstation.
CLS: NAMD$="Untitled": MPH$=PTH$
GOSUB BORDER
LINE (0,0)-(639,8),1,BF: GOSUB SM1: GOSUB SM2: GOSUB SM3: GOSUB SM4: GOSUB SM5
GOTO MAIN
NEGA2: ' Reverse the rectangle defined by (x,y)-(h,k)
GET (3,12)-(344,35),SW: LINE (3,12)-(344,35),0,BF: LINE (3,12)-(344,35),1,B: LINE (5,14)-(342,33),1,B
LOCATE 3,20 : PRINT "Reverse Image Function";
LOCATE 4,2: PRINT "Reverse from (";
PRINT USING "###";X;: PRINT ",";: PRINT USING "###";Y;
PRINT ") to (____,____)";
BL=48: BU=57: REY=4: REX=29: MAXL=3: GOSUB RECIEVE
HB=VAL(HW$)
BL=48: BU=57: REY=4: REX=34: MAXL=3: GOSUB RECIEVE
KB=VAL(HW$)
LINE (3,12)-(344,35),0,BF: PUT (3,12),SW,PSET
IF HB>639 THEN HB=639 ELSE IF HB<0 THEN HB=0
IF KB>199 THEN KB=199 ELSE IF KB<10 THEN KB=10
IF (HB<X AND KB>Y) THEN
GET(HB,Y)-(X,KB),SX
LINE (HB,Y)-(X,KB),1,BF
PUT (HB,Y),SX,XOR
GOSUB BORDER
ELSEIF (HB<X AND KB<Y) THEN
GET(HB,KB)-(X,Y),SX
LINE (HB,KB)-(X,Y),1,BF
PUT (HB,KB),SX,XOR
GOSUB BORDER
ELSEIF (HB>X AND KB<Y) THEN
GET(X,KB)-(HB,Y),SX
LINE (X,KB)-(HB,Y),1,BF
PUT (X,KB),SX,XOR
GOSUB BORDER
ELSEIF (HB>X AND KB>Y) THEN
GET(X,Y)-(HB,KB),SX
LINE (X,Y)-(HB,KB),1,BF
PUT (X,Y),SX,XOR
GOSUB BORDER
END IF
GOTO MAIN
NEGA1: ' Reverse screen image.
GET (1,11)-(638,198),SW
LINE (1,11)-(638,198),1,BF
PUT (1,11),SW,XOR
GOSUB BORDER
GOTO MAIN
BORDER:
LINE (0,10)-(639,199),1,B
RETURN
MOVE: ' Move a rectangle defined by (x,y)-(h,k)
' to a rectangle with upper left corner defined at (i,j)
GET (3,12)-(336,51),SW: LINE (3,12)-(336,51),0,BF
LINE (3,12)-(336,51),1,B: LINE (4,14)-(334,49),1,B
LOCATE 3,15: PRINT "Moving Image Function";
LOCATE 4,2: PRINT "Get from (";: PRINT USING "###";X;
PRINT ",";: PRINT USING "###";Y;: PRINT ") to (____,____)";
ME1: BL=48: BU=57: REY=4: REX=25: MAXL=3: GOSUB RECIEVE
H=VAL(HW$)
IF H<X THEN GOSUB ILLEGAL: GOTO ME1
ME2: BL=48: BU=57: REY=4: REX=30: MAXL=3: GOSUB RECIEVE
K=VAL(HW$)
IF K<Y THEN GOSUB ILLEGAL: GOTO ME2
LINE (3,12)-(336,51),O,BF: PUT (3,12),SW,PSET
GET (X,Y)-(H,K),SW
LOCATE 1,1: PRINT SPC(79);" ";
LOCATE 1,1:
PRINT "Use the cursor keys to move the image. Press Esc to cancel, Return when done.";
I=X: J=Y: IB=H-X: JB=K-Y
GET (I,J)-(I+IB,J+JB),SX
PUT (I,J),SW,PSET
MV1: WVZ$=INKEY$
IF WVZ$="" THEN
GOTO MV1
ELSEIF WVZ$=CHR$(13) THEN
PUT (I,J),SW,PSET
LINE (0,0)-(639,8),1,BF
GOSUB SM1: GOSUB SM2: GOSUB SM3: GOSUB SM4: GOSUB SM5
GOTO MAIN
ELSEIF WVZ$=CHR$(27) THEN
PUT (I,J),SX,PSET
LINE (0,0)-(639,8),1,BF
GOSUB SM1: GOSUB SM2: GOSUB SM3: GOSUB SM4: GOSUB SM5
GOTO MAIN
GOTO MV9
ELSEIF WVZ$="1" THEN
PUT (I,J),SX,PSET: I=I-10: J=J+5 : GOTO MV9
ELSEIF WVZ$="2" THEN
PUT (I,J),SX,PSET: J=J+5 : GOTO MV9
ELSEIF WVZ$="3" THEN
PUT (I,J),SX,PSET: I=I+10: J=J+5 : GOTO MV9
ELSEIF WVZ$="4" THEN
PUT (I,J),SX,PSET: I=I-10: GOTO MV9
ELSEIF WVZ$="6" THEN
PUT (I,J),SX,PSET: I=I+10: GOTO MV9
ELSEIF WVZ$="7" THEN
PUT (I,J),SX,PSET: I=I-10: J=J-5 : GOTO MV9
ELSEIF WVZ$="8" THEN
PUT (I,J),SX,PSET: J=J-5 : GOTO MV9
ELSEIF WVZ$="9" THEN
PUT (I,J),SX,PSET: I=I+10: J=J-5 : GOTO MV9
ELSEIF LEN(WVZ$)=2 THEN
AQ=ASC(RIGHT$(WVZ$,1))
IF AQ=71 THEN
PUT (I,J),SX,PSET
I=I-1: J=J-1
GOTO MV9
ELSEIF AQ=72 THEN
PUT (I,J),SX,PSET
J=J-1
GOTO MV9
ELSEIF AQ=73 THEN
PUT (I,J),SX,PSET
I=I+1: J=J-1
GOTO MV9
ELSEIF AQ=75 THEN
PUT (I,J),SX,PSET
I=I-1
GOTO MV9
ELSEIF AQ=77 THEN
PUT (I,J),SX,PSET
I=I+1
GOTO MV9
ELSEIF AQ=79 THEN
PUT (I,J),SX,PSET
I=I-1: J=J+1
GOTO MV9
ELSEIF AQ=80 THEN
PUT (I,J),SX,PSET
J=J+1
GOTO MV9
ELSEIF AQ=81 THEN
PUT (I,J),SX,PSET
I=I+1: J=J+1
GOTO MV9
ELSE GOTO MV1
END IF
END IF
GOTO MV1
MV9: IF I<1 THEN I=(639-(H-X+1)) ELSE IF I+(H-X+1)>639 THEN I=1
IF J<11 THEN J=(199-(K-Y+1)) ELSE IF J+(K-Y+1)>199 THEN J=11
GET (I,J)-(I+IB,J+JB),SX
PUT (I,J),SW,PSET: GOTO MV1
CSTEP: ' Change interval of x and y movement.
GET (3,12)-(336,51),SW: LINE (3,12)-(336,51),0,BF
LINE (3,12)-(336,51),1,B: LINE (5,14)-(334,49),1,B
LOCATE 3,20: PRINT "Step Function";
LOCATE 4,2: PRINT "Change X step from ";
PRINT USING "###";OX;: PRINT " to..";
BL=46: BU=57: REY=4: REX=30: MAXL=3: GOSUB RECIEVE
Q$=HW$
IF Q$="" THEN OX=OX ELSE OX=VAL(Q$)
LOCATE 5,2: PRINT "Change Y Step from ";
PRINT USING "###";OY;: PRINT " to..";
BL=46: BU=57: REY=5: REX=30: MAXL=3: GOSUB RECIEVE
Q$=HW$
IF Q$="" THEN OY=OY ELSE OY=VAL(Q$)
LINE (3,12)-(336,51),0,BF: PUT (3,12),SW
GOSUB SM1
GOTO MAIN
TEXT: ' Enter text mode.
INK=8
LINE (0,0)-(8,7),1,BF
GET (0,0)-(8,7),CZ : ' CURSOR CHARACTER
LOCATE 1,1: PRINT SPC(2);: LOCATE 1,30: PRINT "Text Mode";: PUT (232,0),Q1,XOR
PUT (PZ,PY),CZ
T1: Q$=INKEY$
IF Q$="" THEN
GOTO T1
ELSEIF ASC(Q$)=8 THEN
GOTO T1
ELSEIF Q$=CHR$(27) THEN
PUT (PZ,PY),CZ
LINE (0,0)-(639,8),1,BF
GOSUB SM1: GOSUB SM2: GOSUB SM3: GOSUB SM4: GOSUB SM5
GOTO MAIN
END IF
IF Q$=CHR$(13) THEN
IF INK=8 THEN
INK=1
GOTO T1
ELSE INK=8: GOTO T1
END IF
END IF
IF LEN (Q$)=2 THEN GOTO T2 ELSE GOTO T4
T2: AQ=ASC(RIGHT$(Q$,1))
T3: Q$=""
GZ=PZ: GY=PY
IF AQ=71 THEN
PZ=INT((PZ)/8)*8+7
TZ=INT((TZ)/8)*8+7
PY=INT((PY)/8)*8
TY=INT((TY)/8)*8
END IF
IF (AQ=77 AND PLO=1) THEN
PZ=PZ+8
TZ=TZ+8
ELSEIF AQ=77 THEN
PZ=PZ+INK
TZ=TZ+INK
END IF
IF AQ=75 THEN
PZ=PZ-INK
TZ=TZ-INK
END IF
IF AQ=72 THEN
PY=PY-INK
TY=TY-INK
END IF
IF AQ=80 THEN
PY=PY+INK
TY=TY+INK
END IF
IF PZ<7 THEN
PZ=623
PY=PY-INK
ELSEIF PZ>623 THEN
PZ=7
PY=PY+INK
END IF
IF TZ<7 THEN
TZ=623
TY=TY-INK
ELSEIF TZ>623 THEN
TZ=7
TY=TY+INK
END IF
IF PY<16 THEN
PY=184
ELSEIF PY>184 THEN
PY=16
END IF
IF TY<16 THEN
TY=184
ELSEIF TY>184 THEN
TY=16
END IF
PUT (GZ,GY),CZ
IF PLO=1 THEN
PLO=0
PUT (GZ,GY),CA
END IF
PUT (PZ,PY),CZ
GOTO T1
T4: LOCATE 1,1: PRINT Q$;
GET (0,0)-(8,7),CA
LOCATE 1,1: PRINT SPC(1);
PLO=1: AQ=77
GOTO T3
KLINE: ' Clear command line, and set printer for screen dump.
LPRINT CHR$(27)+"A"+CHR$(8);
IF YARBLOCKO=2 THEN LPRINT CHR$(27)+"2"
LOCATE 1,1: PRINT SPC(79);" ";
FOR G=1 TO 5000: NEXT G
LINE (0,0)-(639,8),1,BF
GOSUB SM1: GOSUB SM2: GOSUB SM3: GOSUB SM4: GOSUB SM5
GOTO MAIN
ILLEGAL: ' Illegal input response.
BEEP
LOCATE 1,1: PRINT "Illegal Co-ordinates.";
BEEP
I1: BVD$=INKEY$: IF BVD$<>CHR$(27) THEN GOTO I1
LOCATE 1,1: PRINT " ";
LINE (0,0)-(639,8),1,BF
GOSUB SM1: GOSUB SM2: GOSUB SM3: GOSUB SM4: GOSUB SM5
RETURN
BOX: ' Draw a rectangle defined by (x,y)-(h,k) in either black or white, either filled or empty.
GET (3,12)-(384,75),SW: LINE (3,12)-(384,75),0,BF
LINE (3,12)-(384,75),1,B: LINE (5,14)-(382,73),1,B
LOCATE 3,26 : PRINT "Box Function";
LOCATE 4,2 : PRINT "Box defined from (";
PRINT USING "###";X;: PRINT ",";: PRINT USING "###";Y;
PRINT ") to (____,____)";
BL=48: BU=57: REY=4: REX=33: MAXL=3: GOSUB RECIEVE
H=VAL(HW$)
BL=48: BU=57: REY=4: REX=38: MAXL=3: GOSUB RECIEVE
K=VAL(HW$)
IF H<0 THEN H=0 ELSE IF H>639 THEN H=639
IF K<10 THEN K=10 ELSE IF K>199 THEN K=199
LOCATE 5,2 : PRINT "Colour of outline.(Black=0, White=1)..";
BL=48: BU=49: REY=5: REX=41: MAXL=1: GOSUB RECIEVE
CD=VAL(HW$)
BX1: LOCATE 6,2: PRINT SPC(40);
LOCATE 6,2 : PRINT "Fill box (Y/N)........................";
BL=65: BU=122: REY=6: REX=41: MAXL=1: GOSUB RECIEVE
WVZ$=HW$
IF (WVZ$="N" OR WVZ$="n") THEN GOTO BO1 ELSE IF (WVZ$="Y" OR WVZ$="y") THEN GOTO BO1 ELSE GOTO BX1
BO1: LOCATE 9,2 : PRINT "Esc to Cancel. Return to Go.";
BX2: ET$=INKEY$: IF ET$="" THEN GOTO BX2
IF ET$=CHR$(27) THEN
LINE (3,12)-(384,75),0,BF
PUT (3,12),SW,PSET
GOTO MAIN
END IF
IF (ET$=CHR$(13) AND (WVZ$="N" OR WVZ$="n")) THEN LINE (3,12)-(384,75),0,BF: PUT (3,12),SW,PSET: LINE (X,Y)-(H,K),CD,B: GOTO MAIN
IF (ET$=CHR$(13) AND (WVZ$="Y" OR WVZ$="y")) THEN LINE (3,12)-(384,75),0,BF: PUT (3,12),SW,PSET: LINE (X,Y)-(H,K),CD,BF: GOTO MAIN
HELP: ' Help Window. Pop-up Command One.
NS=14
GET (3,12)-(335,166),SW
LINE (3,12)-(335,166),0,BF
LINE (3,12)-(335,166),1,B
LINE (5,14)-(333,164),1,B
XS=1
GOSUB ONE
LOOPHELP:
L2: QU$=INKEY$: IF QU$="" THEN GOTO L2
IF ASC(RIGHT$(QU$,1))=73 THEN
XS=XS-1
ELSEIF ASC(RIGHT$(QU$,1))=81 THEN
XS=XS+1
ELSEIF QU$=CHR$(27) THEN
LINE (3,12)-(335,166),0,BF
PUT (3,12),SW,PSET
GOTO MAIN
ELSEIF QU$=CHR$(14) THEN
LINE (3,12)-(335,166),0,BF
PUT (3,12),SW,PSET
GOTO CLOCK
ELSEIF QU$=CHR$(15) THEN
LINE (3,12)-(335,166),0,BF
PUT (3,12),SW,PSET
GOTO DISKDIR
ELSEIF QU$=CHR$(16) THEN
LINE (3,12)-(335,166),0,BF
PUT (3,12),SW,PSET
GOTO CALC
ELSEIF QU$=CHR$(17) THEN
LINE (3,12)-(335,166),0,BF
PUT (3,12),SW,PSET
GOTO HEADLINE
END IF
L3:
IF XS<1 THEN
XS=1
GOTO LOOPHELP
ELSEIF XS>NS THEN
XS=NS
GOTO LOOPHELP
END IF
ON XS GOSUB ONE,TWO,THREE,FOUR,FIVE,SIX,SEVEN,EIGHT,NINE,TEN,_
ELEVEN,TWELVE,THIRTEEN,FOURTEEN
GOTO LOOPHELP
ONE:
LINE (6,15)-(332,163),0,BF
LINE (5,14)-(333,22),0,BF: LINE (5,14)-(333,25),1,B: PAINT (6,15),CHR$(170)+CHR$(85)
LOCATE 3,14: PRINT " User Commands ";
LOCATE 5,3: PRINT " F1...Call up help screen.";
LOCATE 7,3: PRINT " B....Draw a rectangle defined ";
LOCATE 8,3: PRINT " by (X,Y)-(H,K) as corners ";
LOCATE 10,3: PRINT " C....Draw a circle at (X,Y). ";
LOCATE 11,3: PRINT " Give Radius, Color, X:Y Ratio.";
LOCATE 13,3: PRINT " D....Enter `Draw' Mode. ";
LOCATE 15,3: PRINT " E....Enter `Erase' Mode. ";
LOCATE 17,3: PRINT " F....Fill the area around the ";
LOCATE 18,3: PRINT " co-ordinates (X,Y) with white. ";
LOCATE 20,3: PRINT "Press PgDn for more. Esc to exit.";
RETURN
TWO:
LINE (6,15)-(332,163),0,BF
LOCATE 3,3: PRINT "Shift - F....Fill the area around the ";
LOCATE 4,3: PRINT " co-ordinates (X,Y) with tiles. ";
LOCATE 6,3: PRINT "Shift - G....Get a rectangle defined by";
LOCATE 7,3: PRINT " (X,Y)-(H,K) and put it at (I,J)";
LOCATE 9,3: PRINT " H....Return cursor to (320,100)";
LOCATE 11,3: PRINT " J....Jump to co-ordinates (H,K)";
LOCATE 13,3: PRINT " K....Clear screen. ";
LOCATE 15,3: PRINT " L....Draw a line from (X,Y) to ";
LOCATE 16,3: PRINT " (H,K) in either black or white.";
LOCATE 20,3: PRINT "Press PgDn/PgUp for more. Esc to exit.";
RETURN
THREE:
LINE (6,15)-(332,163),0,BF
LOCATE 3,3: PRINT " M....Magnification Function. ";
LOCATE 5,3: PRINT " N....Rename screen filename. ";
LOCATE 7,3: PRINT " O....Other Cursor. ";
LOCATE 9,3: PRINT "Shift - P....Small screen dump. ";
LOCATE 10,3: PRINT " P....Large screen dump. ";
LOCATE 11,3: PRINT " (Command line will be erased.) ";
LOCATE 13,3: PRINT "Shift - Q....Change X and Y step of the";
LOCATE 14,3: PRINT " cursor. ";
LOCATE 16,3: PRINT " R....Restore screen from disk. ";
LOCATE 17,3: PRINT " S....Save screen to disk. ";
LOCATE 20,3: PRINT "Press PgDn/PgUp for more. Esc to exit.";
RETURN
FOUR:
LINE (6,15)-(332,163),0,BF
LINE (10,100)-(328,100),1
LOCATE 3,3: PRINT "Shift - T....Enter Text Mode. ";
LOCATE 4,3: PRINT "Text Mode Commands: ";
LOCATE 6,3: PRINT " Return.Toggle between regular ";
LOCATE 7,3: PRINT " cursor movement and fine moving. ";
LOCATE 9,3: PRINT " Home...Move cursor to nearest ";
LOCATE 10,3: PRINT " regular cursor location. ";
LOCATE 12,3: PRINT " Esc....Re-enter graphics mode. ";
LOCATE 14,3: PRINT " X....Reverse entire image. ";
LOCATE 16,3: PRINT "Shift - X....Reverse rectangle defined ";
LOCATE 17,3: PRINT " by (X,Y)-(H,K). ";
LOCATE 20,3: PRINT "Press PgDn/PgUp for more. Esc to exit.";
RETURN
FIVE:
LINE (6,15)-(332,163),0,BF
LOCATE 3,3: PRINT "/.......Remove top command line for ";
LOCATE 4,3: PRINT " printing the screen. ";
LOCATE 5,3: PRINT "+...-...Select font file number. ";
LOCATE 7,3: PRINT "To print the screen using the PrtSc key";
LOCATE 8,3: PRINT "do the following: ";
LOCATE 10,3: PRINT "For a LARGE printout, press the left ";
LOCATE 11,3: PRINT "Shift key and the PrtSc key together. ";
LOCATE 13,3: PRINT "For a SMALL printout, press the right ";
LOCATE 14,3: PRINT "Shift key and the PrtSc key together. ";
LOCATE 16,3: PRINT "Note: The `/' command only removes the ";
LOCATE 17,3: PRINT "command line for 10 seconds. This is ";
LOCATE 18,3: PRINT "for use with the PrtSc key commands. ";
LOCATE 20,3: PRINT "Press PgDn/PgUp for more. Esc to exit.";
RETURN
SIX:
LINE (6,15)-(332,163),0,BF
LOCATE 3,15: PRINT"Cursor Controls:";
LOCATE 5,3: PRINT"Home Up PgUp ";
LOCATE 6,3: PRINT" ";
LOCATE 7,3: PRINT" ";
LOCATE 8,3: PRINT"Left Right";
LOCATE 9,3: PRINT" ";
LOCATE 10,3: PRINT" ";
LOCATE 11,3: PRINT"End Down PgDn ";
LOCATE 13,3: PRINT"Seven Eight Nine ";
LOCATE 14,3: PRINT" ";
LOCATE 15,3: PRINT" ";
LOCATE 16,3: PRINT"Four Six ";
LOCATE 17,3: PRINT" ";
LOCATE 18,3: PRINT" ";
LOCATE 19,3: PRINT"One Two Three ";
LOCATE 20,3: PRINT"Press PgDn/PgUp for more. Esc to exit.";
LINE (168,43)-(168,77),1: LINE (168,107)-(168,141),1,,&HFF00
LINE (60,60)-(275,60),1: LINE (60,124)-(275,124),1,,&HFF00
LINE (60,77)-(275,43),1: LINE (60,141)-(275,107),1,,&HFF00
LINE (60,43)-(275,77),1: LINE (60,107)-(275,141),1,,&HFF00
RETURN
SEVEN:
LINE (6,15)-(332,163),0,BF
LOCATE 3,15: PRINT "Additional Functions:";
LOCATE 5,3 : PRINT "F2.....Pop-up Clock.";
LOCATE 6,3 : PRINT "F3.....List files in a specified";
LOCATE 7,3 : PRINT " disk drive directory.";
LOCATE 8,3: PRINT "F4.....Calculator Function. ";
LOCATE 9,3: PRINT "F5.....Headline/Marquee. ";
LOCATE 10,3: PRINT " Display a headline in the";
LOCATE 11,3: PRINT " defined rectangle.";
LOCATE 12,3: PRINT "F6.....Extract symbol from font.";
LOCATE 13,3: PRINT "F10....Fast Exit, stage right.";
LOCATE 15,3: PRINT "\......Display Command Line Menu.":
LOCATE 20,3: PRINT "Press PgDn/PgUp for more. Esc to exit";
RETURN
EIGHT:
LINE (6,15)-(332,163),0,BF
LOCATE 3,15: PRINT "Using Text Mode:";
LOCATE 5,3: PRINT "The text mode allows you to place text ";
LOCATE 6,3: PRINT "anywhere within the screen borders. But";
LOCATE 7,3: PRINT "in order to use graphics again, you ";
LOCATE 8,3: PRINT "exit the text mode. In the text mode ";
LOCATE 9,3: PRINT "the cursor is originally located on the";
LOCATE 10,3: PRINT "regular IBM 80 X 25 grid. Using the Esc";
LOCATE 11,3: PRINT "key to enter the fine cursor movement ";
LOCATE 12,3: PRINT "mode, you can place the cursor between";
LOCATE 13,3: PRINT "lines for either exponential or base ";
LOCATE 14,3: PRINT "notation. Pressing the Home key will ";
LOCATE 15,3: PRINT "put the cursor on the nearest IBM grid";
LOCATE 16,3: PRINT "location. In order to delete letters,";
LOCATE 17,3: PRINT "you must position the cursor on top of";
LOCATE 20,3: PRINT "Press PgDn/PgUp for more. Esc to exit";
RETURN
NINE:
LINE (6,15)-(332,163),0,BF
LOCATE 3,3: PRINT "the letter exactly, and re-enter the ";
LOCATE 4,3: PRINT "character. The space bar key has the ";
LOCATE 5,3: PRINT "same effect as the right cursor key, ";
LOCATE 6,3: PRINT "in that it will move the cursor one ";
LOCATE 7,3: PRINT "character space on either the IBM grid";
LOCATE 8,3: PRINT "or the non-standard grid, but will not";
LOCATE 9,3: PRINT "erase text or graphics. ";
LOCATE 11,3: PRINT "The backspace key has been turned off.";
LOCATE 12,3: PRINT "To backspace, use the left cursor key.";
LOCATE 20,3: PRINT "Press PgDn/PgUp for more. Esc to exit";
RETURN
TEN:
LINE (6,15)-(332,163),0,BF
LOCATE 3,3: PRINT " F6....Preset & User-defined fonts. ";
LOCATE 5,3: PRINT "ETCH CGA comes with with three preset";
LOCATE 6,3: PRINT "fonts stored in the files FONT1.DAT, ";
LOCATE 7,3: PRINT "FONT2.DAT, & FONT3.DAT. However, it is";
LOCATE 8,3: PRINT "to create your own fonts which can be";
LOCATE 9,3: PRINT "used with the F6 Icon command. To do";
LOCATE 10,3: PRINT"this, load the file FONTX.DAT when";
LOCATE 11,3: PRINT"using ETCH CGA. This file is a";
LOCATE 12,3: PRINT"template for creating fonts. Draw any";
LOCATE 13,3: PRINT"symbol within the dotted lines, then";
LOCATE 14,3: PRINT"erase the lines. Then, save the screen";
LOCATE 15,3: PRINT"with a filename with the syntax";
LOCATE 16,3: PRINT"FONT#.DAT, where # is an integer";
LOCATE 17,3: PRINT"between 4 and 9 inclusive. Then use";
LOCATE 18,3: PRINT"SETUP.EXE to set the number of user-";
LOCATE 19,3: PRINT"defined fonts created.";
LOCATE 20,3: PRINT"Press PgDn/PgUp for more. Esc to exit.";
RETURN
ELEVEN:
LINE (6,15)-(332,163),0,BF
LOCATE 3,15: PRINT "Default Settings:";
LOCATE 5,3: PRINT "The following functions incorporate ";
LOCATE 6,3: PRINT "default values for a carriage return. ";
LOCATE 8,3: PRINT "Circle..Ratio: .42 ";
LOCATE 9,3: PRINT " Color: 1 ";
LOCATE 10,3: PRINT " Degree Start: 0 ";
LOCATE 11,3: PRINT " Degree End: 360 ";
LOCATE 13,3: PRINT "Name, Store, Restore";
LOCATE 14,3: PRINT " The initial filespec for these";
LOCATE 15,3: PRINT " functions is Untitled. The file";
LOCATE 16,3: PRINT " name is displayed on the";
LOCATE 17,3: PRINT " top line of the screen.";
LOCATE 20,3: PRINT "Press PgDn/PgUp for more. Esc to exit";
RETURN
TWELVE:
LINE (6,15)-(332,163),0,BF
LOCATE 3,3: PRINT "Step....The X,Y steps are initially";
LOCATE 4,3: PRINT " set to 1. A carriage return";
LOCATE 5,3: PRINT " for either step will result ";
LOCATE 6,3: PRINT " in an unchanged step. ";
LOCATE 8,3: PRINT "Etch CGA is by Charles Milner. ";
LOCATE 9,3: PRINT "Ver. 2.1 6650 Sperling Avenue. ";
LOCATE 10,3: PRINT " Burnaby, B.C. ";
LOCATE 11,3: PRINT " V5E 2V7 ";
LOCATE 13,3: PRINT " Copyright [c] 1986 CSI. ";
LOCATE 20,3: PRINT "Press PgDn/PgUp for more. Esc to exit";
RETURN
THIRTEEN:
LINE (6,15)-(332,163),0,BF
LOCATE 3,3: PRINT " Programme Registration ";
LOCATE 5,3: PRINT "This programme is distributed using the";
LOCATE 6,3: PRINT "SHAREWARE system. Feel free to give ";
LOCATE 7,3: PRINT "unaltered copies of this programme to";
LOCATE 8,3: PRINT "anyone, provided this message remains.";
LOCATE 10,3: PRINT "If you like this programme, send $5.00 ";
LOCATE 11,3: PRINT "+ $2.00 S&H. to register your copy. If";
LOCATE 12,3: PRINT "you include a 360K diskette, the latest";
LOCATE 13,3: PRINT "version will be shipped to you
LOCATE 14,3: PRINT "immediately.";
LOCATE 16,3: PRINT "Please note: The only obligation to";
LOCATE 17,3: PRINT "send any money is if you are happy with";
LOCATE 18,3: PRINT "the product. - Chuck -";
LOCATE 20,3: PRINT "Press PgDn/PgUp for more. Esc to exit.";
RETURN
FOURTEEN:
LINE (6,15)-(332,163),0,BF
LOCATE 3,3: PRINT " Ideas & Errors ";
LOCATE 5,3: PRINT "If you locate an error in this product,";
LOCATE 6,3: PRINT "then send me a note, indicating how you";
LOCATE 7,3: PRINT "found it, etc. This results in better ";
LOCATE 8,3: PRINT "upgrades. ";
LOCATE 10,3: PRINT "Any ideas on added features are always ";
LOCATE 11,3: PRINT "welcomed. Send in your idea, or coded ";
LOCATE 12,3: PRINT "subroutine. If I use your idea, I will";
LOCATE 13,3: PRINT "acknowledge this in the credits. The";
LOCATE 14,3: PRINT "chances of actually getting cash are";
LOCATE 15,3: PRINT "pretty slim, though.";
LOCATE 17,3: PRINT " - Chuck -";
LOCATE 19,3: PRINT "Press PgUp for more.";
LOCATE 20,3: PRINT " Esc to exit.";
RETURN
CLOCK: ' Analog Style Clock Based On Internal Time. Pop-up Command Two.
GET (399,12)-(636,130),SW
LINE (399,12)-(636,130),0,BF
LINE (399,12)-(636,130),1,B
LINE (401,14)-(634,128),1,BF
LINE (401,119)-(634,128),0,BF
LINE (401,119)-(634,128),1,B
PAINT (402,121),CHR$(170)+CHR$(85)
CH=518: CK=68
PI=3.1415927#
FOR N=0 TO 2*PI STEP(2*PI/12)
JX=SIN(N)*105+CH
JY=COS(N)*105*.42+CK
CIRCLE (JX,JY),3,0,,,.42
NEXT N
FOR N=0 TO 2*PI STEP (2*PI/60)
JX=SIN(N)*105+CH
JY=COS(N)*105*.42+CK
PSET (JX,JY),0
NEXT N
IP=(2*PI/60)
GOSUB HOUR: GOSUB MINUTE: GOSUB SECOND
CL1: QRF$=TIME$
CL2: QRG$=TIME$: HC=0
IF VAL(RIGHT$(QRF$,2))<VAL(RIGHT$(QRG$,2)) THEN
GOSUB SECOND
HC=1
ELSEIF (VAL(RIGHT$(QRG$,2))=0 AND VAL(RIGHT$(QRF$,2))=59) THEN
GOSUB SECOND
HC=1
END IF
IF VAL(MID$(QRF$,4,2))<VAL(MID$(QRG$,4,2)) THEN
GOSUB MINUTE
HC=1
ELSEIF (VAL(MID$(QRG$,4,2))=0 AND VAL(MID$(QRF$,4,2))=59) THEN
GOSUB MINUTE
HC=1
END IF
PT$=MID$(QRG$,4,2)
IF RIGHT$(QRG$,2)="00" THEN
IF (VAL(PT$)/12=INT(VAL(PT$)/12)) THEN
GOSUB HOUR
END IF
END IF
QU$=INKEY$
IF QU$=CHR$(127) THEN
LINE (399,12)-(636,130),0,BF
PUT (399,12),SW
GOTO HELP
ELSEIF QU$=CHR$(27) THEN
LINE (399,12)-(636,130),0,BF
PUT (399,12),SW
GOTO MAIN
ELSEIF QU$=CHR$(15) THEN
LINE (399,12)-(636,130),0,BF
PUT (399,12),SW
GOTO DISKDIR
ELSEIF QU$=CHR$(16) THEN
LINE (399,12)-(636,130),0,BF
PUT (399,12),SW
GOTO CALC
ELSEIF QU$=CHR$(17) THEN
LINE (399,12)-(636,130),0,BF
PUT (399,12),SW
GOTO HEADLINE
ELSEIF HC=1 THEN
GOTO CL1
ELSE GOTO CL2
END IF
SECOND:
PSET (CH,CK),(1-POINT(CH,CK))
S=VAL(RIGHT$(TIME$,2))
LOCATE 16,62: PRINT TIME$
SEC=-(S)*(IP)+PI
SEC2=SEC+(IP)
JX=SIN(SEC)*98+CH: JY=COS(SEC)*41.16+CK
JX2=SIN(SEC2)*98+CH: JY2=COS(SEC2)*41.16+CK
JX3=SIN(SEC)*5+CH: JY3=COS(SEC)*2.1+CK
JX4=SIN(SEC2)*5+CH: JY4=COS(SEC2)*2.1+CK
LINE (JX4,JY4)-(JX2,JY2),1
LINE (JX3,JY3)-(JX,JY),0
LINE (MX3,MY3)-(MX,MY),0
LINE (HX3,HY3)-(HX,HY),0
RETURN
MINUTE:
M=VAL(MID$(TIME$,4,2))
MIN=-(M)*(IP)+PI
MIN2=MIN+(IP)
MX=SIN(MIN)*86+CH: MY=COS(MIN)*36.12+CK
MX2=SIN(MIN2)*86+CH: MY2=COS(MIN2)*36.12+CK
MX3=SIN(MIN)*5+CH: MY3=COS(MIN)*2.1+CK
MX4=SIN(MIN2)*5+CH: MY4=COS(MIN2)*2.1+CK
LINE (MX4,MY4)-(MX2,MY2),1
LINE (MX3,MY3)-(MX,MY),0
LINE (HX3,HY3)-(HX,HY),0
RETURN
HOUR:
H=VAL(LEFT$(TIME$,2))
HOU=-(H)*5*(IP)+PI
HOU=HOU-(INT(((VAL(MID$(TIME$,4,2)))/12))*(IP)): HOU2=HOU+(IP)
HX=SIN(HOU)*64+CH: HY=COS(HOU)*26.88+CK
HX2=SIN(HOU2)*64+CH: HY2=COS(HOU2)*26.88+CK
HX3=SIN(HOU)*5+CH: HY3=COS(HOU)*2.1+CK
HX4=SIN(HOU2)*5+CH: HY4=COS(HOU2)*2.1+CK
LINE (HX4,HY4)-(HX2,HY2),1
LINE (HX3,HY3)-(HX,HY),0
RETURN
DISKDIR: ' Pop-up Command f3. - List disk directory.
' Using FILES command.
GET (0,12)-(636,102),SW
LINE (0,12)-(636,102),0,BF
LINE (0,12)-(636,102),1,B
LINE (0,14)-(634,100),1,B
LOCATE 3,20: PRINT "Disk Directory Function.";
DD1:
LOCATE 4,2: PRINT "Enter drive letter......";
BL=65: BU=122: REY=4: REX=27: MAXL=1: GOSUB RECIEVE
DF$=HW$
IF ASC(DF$)<65 OR ASC(DF$)>72 THEN GOTO DD2 ELSE GOTO DD3
DD2: IF ASC(DF$)<97 OR ASC(DF$)>104 THEN LOCATE 4,2: PRINT SPC(60);: GOTO DD1
DD3:
LOCATE 4,2: PRINT SPC(60);
LOCATE 4,2: PRINT"Enter wildcard...";
BL=33: BU=122: REY=4: REX=20: MAXL=12: GOSUB RECIEVE
DP$=HW$
SPW$=DF$+":\"+DP$
LOCATE 4,2: PRINT SPC(60);
LOCATE 4,2: PRINT SPW$;
FILES SPW$: LINE (0,12)-(0,102),1
LOCATE 12,2: PRINT "Press Esc to continue...";
DD4: WVZ$=INKEY$: IF WVZ$="" THEN GOTO DD4
IF WVZ$=CHR$(27) THEN
LINE (0,12)-(636,102),0,BF
PUT (0,12),SW,PSET
GOTO MAIN
ELSEIF WVZ$=CHR$(14) THEN
LINE (0,12)-(636,102),0,BF
PUT (0,12),SW,PSET
GOTO CLOCK
ELSEIF WVZ$=CHR$(127) THEN
LINE (0,12)-(636,102),0,BF
PUT (0,12),SW,PSET
GOTO HELP
ELSEIF WVZ$=CHR$(16) THEN
LINE (0,12)-(636,102),0,BF
PUT (0,12),SW,PSET
GOTO CALC
ELSEIF WVZ$=CHR$(17) THEN
LINE (0,12)-(636,102),0,BF
PUT (0,12),SW,PSET
GOTO HEADLINE
ELSE GOTO DD4
END IF
CURSOR: ' Change size of cursor.
GET (3,12)-(320,59),SW
LINE (3,12)-(320,59),0,BF
LINE (3,12)-(320,59),1,B
LINE (5,14)-(318,57),1,B
LOCATE 3,20: PRINT "Cursor Function.";
LOCATE 4,2: PRINT "Change cursor from:";
LOCATE 5,2: PRINT USING "##";1+LM;
PRINT " X ";: PRINT USING "##";1+MN;: PRINT " to.. ___ X ___.";
BL=48: BU=57: REY=5: REX=15: MAXL=2: GOSUB RECIEVE
LC=VAL(HW$)
BL=48: BU=57: REY=5: REX=21: MAXL=2: GOSUB RECIEVE
WC=VAL(HW$)
IF LC<1 THEN LC=1 ELSE IF LC>10 THEN LC=10
IF WC<1 THEN WC=1 ELSE IF WC>5 THEN WC=5
OX=LC: OY=WC: LM=LC-1: MN=WC-1
LINE (3,12)-(320,59),0,BF
PUT (3,12),SW,PSET
GOSUB SM1
GOTO MAIN
CALC: ' Calculator Function.
' CSI Vapourware Division.
GET (3,12)-(328,69),SW
LINE (3,12)-(328,69),0,BF
LINE (3,12)-(328,69),1,B
LINE (5,14)-(326,67),1,B
LOCATE 3,12: PRINT "Calculator Function.";
LOCATE 4,10: PRINT "CSI Vapourware Division.";
LOCATE 6,3: PRINT "This exciting new feature of ETCH CGA";
LOCATE 7,3: PRINT "will be available real soon now, maybe";
LOCATE 8,3: PRINT "in the next version, we hope.";
C1: QWERTY$=INKEY$
IF QWERTY$="" THEN
GOTO C1
ELSEIF QWERTY$=CHR$(27) THEN
LINE (3,12)-(320,69),0,BF
PUT (3,12),SW,PSET
GOTO MAIN
ELSEIF QWERTY$=CHR$(127) THEN
LINE (3,12)-(320,69),0,BF
PUT (3,12),SW,PSET
GOTO HELP
ELSEIF QWERTY$=CHR$(14) THEN
LINE (3,12)-(320,69),0,BF
PUT (3,12),SW,PSET
GOTO CLOCK
ELSEIF QWERTY$=CHR$(15) THEN
LINE (3,12)-(320,69),0,BF
PUT (3,12),SW,PSET
GOTO DISKDIR
ELSEIF QWERTY$=CHR$(17) THEN
LINE (3,12)-(320,69),0,BF
PUT (3,12),SW,PSET
GOTO HEADLINE
ELSE GOTO C1
END IF
TILE: 'Tile Function
GET (164,12)-(481,197),SW
LINE (164,12)-(481,197),0,BF: LINE (164,12)-(481,197),1,B
LINE (166,14)-(479,195),1,B
LOCATE 3,35: PRINT "Tile Function";
LOCATE 4,23: PRINT "Move the ";CHR$(127);" with the cursor control";
LOCATE 5,23: PRINT "keys onto the spaces on the tile that";
LOCATE 6,23: PRINT "you wish to fill in. Press the Space";
LOCATE 7,23: PRINT "bar to fill in or remove a space on";
LOCATE 8,23: PRINT "the tile.";
LOCATE 10,23: PRINT "Press Return";
LOCATE 11,23: PRINT "when done.";
LOCATE 18,23: PRINT"Press Esc";
LOCATE 19,23: PRINT"to cancel.";
LINE (302,62)-(462,190),1,B
FOR U=302 TO 462 STEP 20
LINE (U,62)-(U,190),1
NEXT U
FOR U=62 TO 190 STEP 8
LINE (302,U)-(462,U),1
NEXT U
LOCATE 3,23: PRINT CHR$(127);
GET (176,16)-(184,22),CZ
LOCATE 3,23: PRINT " ";
PUT (309,63),CZ
XI=20: YI=8: YLA=63: XLA=309
TL1: FOB$=INKEY$: IF FOB$="" THEN GOTO TL1 ELSE GOTO TL2
TL2: IF FOB$=" " THEN GOTO TL3
IF FOB$=CHR$(13) THEN GOTO TL4
IF FOB$=CHR$(27) THEN LINE (164,12)-(481,197),0,BF: PUT (164,12),SW: GOTO MAIN
IF LEN(FOB$)=2 THEN GOTO TL5 ELSE GOTO TL1
TL5: HK=ASC(RIGHT$(FOB$,1))
PUT (XLA,YLA),CZ
IF HK=72 THEN
YLA=YLA-YI
ELSEIF HK=75 THEN
XLA=XLA-XI
ELSEIF HK=77 THEN
XLA=XLA+XI
ELSEIF HK=80 THEN
YLA=YLA+YI
END IF
IF YLA<63 THEN
YLA=183
ELSEIF YLA>186 THEN
YLA=63
END IF
IF XLA<302 THEN
XLA=449
ELSEIF XLA>462 THEN
XLA=309
END IF
PUT (XLA,YLA),CZ
GOTO TL1
TL3:
LINE (XLA-6,YLA)-(XLA+12,YLA+6),(1-POINT (XLA-1,YLA)),BF
PUT (XLA,YLA),CZ
GOTO TL1
TL4: PUT (XLA,YLA),CZ: RPG$=""
FOR U=63 TO 183 STEP 8: BORNE=7: WL=0
FOR V=303 TO 443 STEP 20
IF POINT(V,U)=1 THEN WL=WL+(2^BORNE)
BORNE=BORNE-1
LOCATE 15,23: PRINT "Calculating";
LOCATE 15,23: PRINT " ";
NEXT V
IF WL=0 THEN NP=NP+1 ELSE NP=0
IF NP>2 THEN ELSE RPG$=RPG$+CHR$(WL)
NEXT U
LINE (164,12)-(481,197),0,BF: PUT (164,12),SW
PAINT (X,Y),RPG$
GOTO MAIN
MAGNIFY: ' Magnification Function.
LOCATE 1,65: PRINT" ";: LOCATE 1,65: PRINT 265;" ";88;" ";
GET (0,0)-(51,25),SW: LINE (0,0)-(51,25),0,BF
LINE (0,0)-(51,25),1,B: GET (0,0)-(51,25),WS
LINE (0,0)-(51,25),0,BF: PUT (0,0),SW
XLA=265: YLA=88: PUT (XLA-1,YLA-1),WS: UJ$=""
MG1: EJ$=INKEY$
IF EJ$<>"" THEN UJ$=EJ$: GOTO MG1
IF LEN(UJ$)=2 THEN
GOTO MG2
ELSEIF UJ$=CHR$(13) THEN
PUT (XLA-1,YLA-1),WS
LINE (0,0)-(639,8),1,BF
GOSUB SM1: GOSUB SM2: GOSUB SM3: GOSUB SM4: GOSUB SM5
GOTO MG3
ELSEIF UJ$=CHR$(27) THEN
PUT (XLA-1,YLA-1),WS
LINE (0,0)-(639,8),1,BF
GOSUB SM1: GOSUB SM2: GOSUB SM3: GOSUB SM4
GOTO MAIN
ELSEIF UJ$="1" THEN
AJ=XLA: BJ=YLA
XLA=XLA-10: YLA=YLA+5 : GOTO MGS
ELSEIF UJ$="2" THEN
AJ=XLA: BJ=YLA
YLA=YLA+5 : : GOTO MGS
ELSEIF UJ$="3" THEN
AJ=XLA: BJ=YLA
XLA=XLA+10: YLA=YLA+5 : GOTO MGS
ELSEIF UJ$="4" THEN
AJ=XLA: BJ=YLA
XLA=XLA-10: : GOTO MGS
ELSEIF UJ$="6" THEN
AJ=XLA: BJ=YLA
XLA=XLA+10: : GOTO MGS
ELSEIF UJ$="7" THEN
AJ=XLA: BJ=YLA
XLA=XLA-10: YLA=YLA-5 : GOTO MGS
ELSEIF UJ$="8" THEN
AJ=XLA: BJ=YLA
YLA=YLA-5 : : GOTO MGS
ELSEIF UJ$="9" THEN
AJ=XLA: BJ=YLA
XLA=XLA+10: YLA=YLA-5 : GOTO MGS
ELSE GOTO MG1
END IF
MG2: QJ=ASC(RIGHT$(UJ$,1)): AJ=XLA: BJ=YLA
IF QJ=80 THEN
YLA=YLA+1
ELSEIF QJ=72 THEN
YLA=YLA-1
ELSEIF QJ=77 THEN
XLA=XLA+1
ELSEIF QJ=75 THEN
XLA=XLA-1
ELSEIF QJ=71 THEN
XLA=XLA-1
YLA=YLA-1
ELSEIF QJ=73 THEN
XLA=XLA+1
YLA=YLA-1
ELSEIF QJ=79 THEN
XLA=XLA-1
YLA=YLA+1
ELSEIF QJ=81 THEN
XLA=XLA+1
YLA=YLA+1
ELSE GOTO MG1
END IF
MGS: IF XLA<2 THEN XLA=588 ELSE IF XLA>588 THEN XLA=2
IF YLA<12 THEN YLA=174 ELSE IF YLA>174 THEN YLA=12
LOCATE 1,65: PRINT XLA;" ";YLA;" ";
PUT (AJ-1,BJ-1),WS: PUT (XLA-1,YLA-1),WS
UJ$="": GOTO MG1
MG3: LX$=STR$(XLA): LY$=STR$(YLA)
IF (VAL(LX$)>270 AND VAL(LX$)<319) THEN GOSUB MG4
GOSUB MG5
XLA=VAL(LX$): YLA=VAL(LY$)
GET (0+PX,0)-(317+PX,199),SW
LINE (0+PX,0)-(317+PX,199),0,BF
LINE (0+PX,0)-(K4+PX,L4),1,B
GET (0+PX,0)-(K4+PX,L4),WS
LINE (0+PX,0)-(K4+PX,L4),0,B
LINE (0+PX,0)-(317+PX,199),1,B
LINE (2+PX,2)-(315+PX,197),1,B
LOCATE 2,3+PD: PRINT CHR$(127);
GET (16+PB,9)-(22+PB,14),PLU
LOCATE 2,3+PD: PRINT " ";
LOCATE 22,3+PC: PRINT "Use the ";CHR$(127);" pointer to modify.";
LOCATE 23,3+PC: PRINT "Press Return to resume Graphics Mode.";
LOCATE 24,3+PC: PRINT "Press Esc to cancel function.";
PUT (XLA-1,YLA-1),WS: GET (XLA,YLA)-(XLA+49,YLA+24),EN
FOR UY=YLA TO YLA+24
FOR UX=XLA TO XLA+49
LINE (6*(UX-(XLA-1))+PX,6*(UY-(YLA-1)))-((6*(UX-(XLA-1))+4)+PX,(6*(UY-(YLA-1))+4)),POINT(UX,UY),BF
NEXT UX
NEXT UY
MX=5+PB: MY=6: MNK=6: EH=XLA+URE: BE=YLA: PUT (MX,MY),PLU: UA$="": MA$=""
MG6: UA$=INKEY$: IF UA$<>"" THEN MA$=UA$: GOTO MG6
IF MA$=" " THEN GOTO MG7 ELSE IF MA$=CHR$(13) THEN GOTO MG8 ELSE IF MA$=CHR$(27) THEN GOTO MG9
IF LEN(MA$)=2 THEN GOTO MG10 ELSE GOTO MG6
MG10: MQ=ASC(RIGHT$(MA$,1)): AM=MX: BM=MY
IF MQ=72 THEN
MY=MY-MNK
BE=BE-1
ELSEIF MQ=80 THEN
MY=MY+MNK
BE=BE+1
ELSEIF MQ=77 THEN
MX=MX+MNK
EH=EH+1
ELSEIF MQ=75 THEN
MX=MX-MNK
EH=EH-1
ELSEIF MQ=71 THEN
MX=MX-MNK
MY=MY-MNK
EH=EH-1
BE=BE-1
ELSEIF MQ=73 THEN
MX=MX+MNK
MY=MY-MNK
EH=EH+1
BE=BE-1
ELSEIF MQ=79 THEN
MX=MX-MNK
MY=MY+MNK
EH=EH-1
BE=BE+1
ELSEIF MQ=81 THEN
MX=MX+MNK
MY=MY+MNK
EH=EH+1
BE=BE+1
END IF
IF MX<5+PX THEN MX=299+PX: EH=XLA+49
IF MX>299+PX THEN MX=5+PX: EH=XLA
IF MY<6 THEN MY=150: BE=YLA+24
IF MY>150 THEN MY=6: BE=YLA
PUT (AM,BM),PLU
PUT (MX,MY),PLU
MA$="": GOTO MG6
MG7: PUT (MX,MY),PLU
LINE (MX+1,MY)-(MX+5,MY+4),1-(POINT(MX+1,MY)),BF
PUT (MX,MY),PLU
PSET (EH,BE),1-(POINT(EH,BE))
MA$=""
GOTO MG6
MG8: PUT (MX,MY),PLU
GOTO MG11
MG9: PUT (MX,MY),PLU
LINE (0+PX,0)-(317+PX,199),0,BF
PUT (0+PX,0),SW
PUT (XLA-1,YLA-1),WS
LINE (XLA,YLA)-(XLA+49,YLA+24),0,BF
PUT (XLA,YLA),EN
GOTO MGEXIT
MG11: LINE (0+PX,0)-(317+PX,199),0,BF
PUT (0+PX,0),SW
PUT (XLA-1,YLA-1),WS
MGEXIT:
LINE (0,0)-(639,8),1,BF: GOSUB SM1: GOSUB SM2: GOSUB SM3: GOSUB SM4: GOSUB SM5
GOTO MAIN
MG4: ' Option C.1
LX$=STR$(270)
RETURN
MG5: ' Nooooooo Trouble
K4=51: L4=26
IF VAL(LX$)<319 THEN
PD=41
PC=40
PX=322
PB=328
URE=1
ELSE PC=0
PX=0
PD=0
PB=0
URE=0
END IF
RETURN
HEADLINE: ' Headline Subroutine.
GET (3,12)-(634,75),SW: LINE (3,12)-(634,75),0,BF
LINE (3,12)-(634,75),1,B: LINE (5,14)-(632,73),1,B
LOCATE 3,12: PRINT"Headline/Marquee Function."
LOCATE 4,2 : PRINT"Define box to hold marquee....";
LOCATE 5,2: PRINT"Box defined from (";: PRINT USING "###";X;
PRINT ",";: PRINT USING "###";Y;: PRINT ") to (____,____)";
BL=48: BU=57: REY=5: REX=33: MAXL=3: GOSUB RECIEVE
H=VAL(HW$)
BL=48: BU=57: REY=5: REX=38: MAXL=3: GOSUB RECIEVE
K=VAL(HW$)
IF H<0 THEN H=0 ELSE IF H>639 THEN H=639
IF K<10 THEN K=10 ELSE IF K>199 THEN K=199
LOCATE 6,2: PRINT"Enter Headline...";
LOCATE 7,2: PRINT STRING$(70,"_");
BL=32: BU=126: REY=7: REX=2: MAXL=70: GOSUB RECIEVE
LA=LEN(HW$)
LOCATE 9,2: PRINT"Press Return to continue, Esc to Cancel.";
H4: ER$=INKEY$: IF ER$="" THEN GOTO H4
IF ER$=CHR$(13) THEN GOTO H6 ELSE IF ER$=CHR$(27) THEN GOTO H5 ELSE GOTO H4
H5: LINE (3,12)-(634,75),0,BF: PUT (3,12),SW: GOTO MAIN
H6: LINE (3,12)-(634,75),0,BF: PUT (3,12),SW
GET (0,0)-(639,9),SW: LOCATE 1,1: PRINT SPC(79);
LOCATE 1,1: PRINT HW$;: LA=LEN(HW$)
IF X>H THEN OP=H: QR=X ELSE OP=X: QR=H
IF Y>K THEN ST=K: UV=Y ELSE ST=Y: UV=K
LINE (OP,ST)-(QR,UV),0,BF
FX=((QR-OP)/(LA*8)): FY=(UV-ST)/8
FOR HS1=0 TO (8*LA)-1
FOR HS2=0 TO 7
LINE ((HS1*FX)+OP,(HS2*FY)+ST)-((HS1*FX)+OP+FX,(HS2*FY)+ST+FY),POINT(HS1,HS2),BF
NEXT HS2
NEXT HS1
LOCATE 1,1: PRINT SPC(79);: PUT (0,0),SW
GOTO MAIN
RECIEVE: ' Get input of from keyboard.
HW$=""
R1: LT$=INKEY$: IF LT$="" THEN GOTO R1
IF LEN(LT$)>1 THEN GOTO R1
IF LEN(HW$)=0 AND LT$=CHR$(8) THEN GOTO R1
IF LT$=CHR$(8) THEN HW$=LEFT$(HW$,LEN(HW$)-1): GOTO R2
IF LT$=CHR$(13) THEN GOTO R3
IF LEN(HW$)=MAXL THEN GOTO R1
IF ASC(LT$)<BL OR ASC(LT$)>BU THEN GOTO R1
HW$=HW$+LT$
LOCATE REY,REX+LEN(HW$)-1,0: PRINT LT$;
R2: LOCATE REY,REX,0: PRINT HW$" ";
GOTO R1
R3: RETURN
ETCHCOM: ' Menu of commands.
GET (0,0)-(304,108),SX
LINE (0,0)-(304,108),0,BF
LINE (0,0)-(304,108),1,B
LINE (2,2)-(302,106),1,B
LINE (10,8)-(101,15),1,BF
GET (10,8)-(101,15),GB
LINE (10,8)-(101,15),0,BF
LOCATE 2,3: PRINT "Help Jump Text";
LOCATE 3,3: PRINT "Box Clear Reverse";
LOCATE 4,3: PRINT "Circle Line Reverse..";
LOCATE 5,3: PRINT "Draw Magnify Clock";
LOCATE 6,3: PRINT "Erase Name Directory";
LOCATE 7,3: PRINT "Fill Cursor Calculator";
LOCATE 8,3: PRINT "Fill.. Step Headline";
LOCATE 9,3: PRINT "Move Restore Quit";
LOCATE 10,3: PRINT "Home Store Cancel";
LOCATE 12,3: PRINT "Use TAB or SPACE to select a";
LOCATE 13,3: PRINT "command. Press RETURN to execute.";
BN=1: EX1=10: EY1=(BN-1)*8+8: PUT (EX1,EY1),GB,XOR: GOSUB E1
E2: A$=INKEY$
IF A$="" THEN
GOTO E2
ELSEIF A$=" " THEN
BN=BN+1
ELSEIF A$=CHR$(9) THEN
BN=BN+9
ELSEIF A$=CHR$(13) THEN
GOTO SELECT
ELSE GOTO E2
END IF
IF BN=36 THEN
BN=1
GOSUB E1
ELSEIF BN=28 AND A$=" " THEN
BN=1
GOSUB E1
ELSEIF BN>27 THEN
BN=BN-26
GOSUB E1
ELSEIF BN>18 THEN
GOSUB E5
ELSEIF BN>9 THEN
GOSUB E3
ELSEIF BN>0 THEN
GOSUB E1
END IF
GOTO E2
E1: PUT (EX1,EY1),GB,XOR
EX1=10: EY1=(BN-1)*8+8
PUT (EX1,EY1),GB,XOR
RETURN
E3: PUT (EX1,EY1),GB,XOR
EX1=106: EY1=(BN-10)*8+8
PUT (EX1,EY1),GB,XOR
RETURN
E5: PUT (EX1,EY1),GB,XOR
EX1=206: EY1=(BN-19)*8+8
PUT (EX1,EY1),GB,XOR
RETURN
SELECT:
LINE (0,0)-(304,108),0,BF
PUT (0,0),sx,PSET
IF BN=4 THEN A$="D" ELSE IF BN=5 THEN A$="E" ELSE IF BN=9 THEN A$="H"
ON BN GOTO HELP,BOX,DCIRCLE,EDRAW,ETRASH,FILL,TILE,MOVE,HOME,JUMP,_
PURGE,DLINE,MAGNIFY,RENAME,CURSOR,CSTEP,DLOAD,DSAVE,TEXT,NEGA1,NEGA2,_
CLOCK,DISKDIR,CALC,HEADLINE,QUIT,CANCEL
CANCEL: A$="": GOTO MAIN
PLARGE: ' Large screen dump.
LPRINT CHR$(27)+"A"+CHR$(8);: AQ=0
IF YARBLOCKO=2 THEN LPRINT CHR$(27)+"2"
WIDTH "LPT1:",255: LOCATE 1,1: PRINT SPC(79);" ";
FOR K=8 TO 196 STEP 4
LPRINT CHR$(27)+"*"+CHR$(4)+CHR$(128)+CHR$(2);
FOR L=0 TO 639
FOR M=0 TO 3
AWP=(6-(2*M)): BWP=AWP+1
IF POINT (L,K+M)=1 THEN AQ=AQ+(2^AWP)+(2^BWP)
NEXT M
LPRINT CHR$(AQ);: AQ=0
NEXT L
LPRINT
NEXT K
LINE (0,0)-(639,8),1,BF: GOSUB SM1: GOSUB SM2: GOSUB SM3: GOSUB SM4: GOSUB SM5
GOTO MAIN
PSMALL: ' Small screen dump.
LPRINT CHR$(27)+"A"+CHR$(8);: AQ=0
IF YARBLOCKO=2 THEN LPRINT CHR$(27)+"2"
WIDTH "LPT1:",255: LOCATE 1,1: PRINT SPC(79);" ";
FOR K=8 TO 192 STEP 8
LPRINT CHR$(27)+"*"+CHR$(3)+CHR$(0)+CHR$(5);
FOR L=0 TO 639
FOR M=0 TO 7
IF POINT (L,K+M)=1 THEN AQ=AQ+(2^(7-M))
NEXT M
LPRINT CHR$(AQ)+CHR$(0);: AQ=0
NEXT L
LPRINT
NEXT K
LINE (0,0)-(639,8),1,BF: GOSUB SM1: GOSUB SM2: GOSUB SM3: GOSUB SM4: GOSUB SM5
GOTO MAIN
ICON: ' Retrieve pre-programmed symbols from disk.
DEF SEG=&HB800
GET (0,0)-(639,199),SW
CLS: LINE (0,0)-(49,25),1,BF: GET (0,0)-(49,25),EN: LINE (0,0)-(49,25),0,BF
LINE (0,0)-(58,10),1,BF: GET (0,0)-(58,10),PLU: LINE (0,0)-(58,10),0,BF
I=1: J=1: H=((I-1)*50)+9: K=((J-1)*35)+14: BLOAD FONT$,0
LOCATE 1,1: PRINT " Select a symbol with the cursor keys, and press Return. Esc cancels function.";
PUT (H,K),EN,XOR
IC1: A$=INKEY$
IF A$="" THEN
GOTO IC1
ELSEIF A$=CHR$(13) THEN
GOTO IC2
ELSEIF A$=CHR$(27) THEN
PUT (0,0),SW,PSET
LINE (0,0)-(639,8),1,BF
GOSUB SM1: GOSUB SM2: GOSUB SM3: GOSUB SM4: GOSUB SM5
GOTO MAIN
ELSEIF LEN(A$)=2 THEN
AQ=ASC(RIGHT$(A$,1))
J2=J: I2=I
IF AQ=72 THEN
J=J-1
ELSEIF AQ=80 THEN
J=J+1
ELSEIF AQ=75 THEN
I=I-1
ELSEIF AQ=77 THEN
I=I+1
ELSE GOTO IC1
END IF
IF I<1 THEN I=12 ELSE IF I>12 THEN I=1
IF J<1 THEN J=4 ELSE IF J>4 THEN J=1
PUT (H,K),EN,XOR: H=((I-1)*50)+9: K=((J-1)*35)+14
PUT (H,K),EN,XOR
GOTO IC1
ELSE GOTO IC1
END IF
IC2: 'Choose bit-mapping option.
LOCATE 1,1: PRINT SPC(79);" ";: LOCATE 24,1: PRINT " Select bit-mapping option, and press Return. Esc cancels function.";
PUT (H,K),EN,XOR: GET (H,K)-(H+48,K+25),EN: I=1: H=((I-1)*107)+78
PUT (H,150),PLU,XOR
IC3: A$=INKEY$
IF A$="" THEN
GOTO IC3
ELSEIF A$=CHR$(13) THEN
GOTO IC4
ELSEIF A$=CHR$(27) THEN
PUT (0,0),SW,PSET
LINE (0,0)-(639,8),1,BF
GOSUB SM1: GOSUB SM2: GOSUB SM3: GOSUB SM4: GOSUB SM5
GOTO MAIN
ELSEIF LEN(A$)=2 THEN
AQ=ASC(RIGHT$(A$,1))
IF AQ=75 THEN
I=I-1
ELSEIF AQ=77 THEN
I=I+1
ELSE GOTO IC3
END IF
IF I<1 THEN I=5 ELSE IF I>5 THEN I=1
PUT (H,150),PLU,XOR: H=((I-1)*107)+78
PUT (H,150),PLU,XOR
GOTO IC3
ELSE GOTO IC3
END IF
IC4: F=I: PUT (0,0),SW,PSET: I=15: J=11: IB=I+49: JB=J+25
GET (I,J)-(IB,JB),PLU
GOSUB IC6
IC5: A$=INKEY$: I2=I: J2=J
IF A$="" THEN
GOTO IC5
ELSEIF A$=CHR$(13) THEN
GOSUB IC7
GOSUB IC6
LINE (0,0)-(639,8),1,BF
GOSUB SM1: GOSUB SM2: GOSUB SM3: GOSUB SM4: GOSUB SM5
GOTO MAIN
ELSEIF A$=CHR$(27) THEN
GOSUB IC7
LINE (0,0)-(639,8),1,BF
GOSUB SM1: GOSUB SM2: GOSUB SM3: GOSUB SM4: GOSUB SM5
GOTO MAIN
ELSEIF A$="1" THEN
I=I-10: J=J+5: GOTO IC90
ELSEIF A$="2" THEN
J=J+5: GOTO IC90
ELSEIF A$="3" THEN
I=I+10: J=J+5: GOTO IC90
ELSEIF A$="4" THEN
I=I-10: GOTO IC90
ELSEIF A$="6" THEN
I=I+10: GOTO IC90
ELSEIF A$="7" THEN
I=I-10: J=J-5: GOTO IC90
ELSEIF A$="8" THEN
J=J-5: GOTO IC90
ELSEIF A$="9" THEN
I=I+10: J=J-5: GOTO IC90
ELSEIF LEN(A$)=2 THEN
AQ=ASC(RIGHT$(A$,1))
IF AQ=71 THEN
I=I-1: J=J-1
ELSEIF AQ=72 THEN
J=J-1
ELSEIF AQ=73 THEN
I=I+1: J=J-1
ELSEIF AQ=75 THEN
I=I-1
ELSEIF AQ=77 THEN
I=I+1
ELSEIF AQ=79 THEN
I=I-1: J=J+1
ELSEIF AQ=80 THEN
J=J+1
ELSEIF AQ=81 THEN
I=I+1: J=J+1
ELSE GOTO IC5
END IF
IC90: GOSUB IC8
IF I<1 THEN I=589 ELSE IF I>589 THEN I=1
IF J<11 THEN J=174 ELSE IF J>174 THEN J=11
GET (I,J)-(I+49,J+25),PLU
GOSUB IC6
GOTO IC5
ELSE GOTO IC5
END IF
IC6: ON F GOTO WON,TOO,TREE,FO,FI
WON: PUT (I,J),EN,PSET: RETURN
TOO: PUT (I,J),EN,PRESET: RETURN
TREE: PUT (I,J),EN,AND: RETURN
FO: PUT (I,J),EN,OR: RETURN
FI: PUT (I,J),EN,XOR: RETURN
IC7: PUT (I,J),PLU,PSET: RETURN
IC8: PUT (I2,J2),PLU,PSET: RETURN
FONT: 'Change font type, and display.
IF A$="-" THEN FONT=FONT-1
IF A$="+" THEN FONT=FONT+1
IF FONT=0 THEN FONT=MXF
IF FONT>MXF THEN FONT=1
FONT$=PTH$+"FONT"+RIGHT$(STR$(FONT),1)+".DAT"
GOSUB SM5
GOTO MAIN
QUIT: ' Exit ETCH CGA
SCREEN 0,0,0
CLS
END